package com.lipl.base.javase.juc.demo;

import java.util.concurrent.locks.Lock;

//重入/递归，不可重入/自旋，虽然名字不同，但是确实是同一种锁，只是从锁的表现跟实现方式的角度来命名而已。
//重入锁：当一个线程获取了A锁以后，若后续方法运行被A锁锁住的话，当前线程也是可以直接进入的。

//当我们运行methodA()的时候，线程获取了lockA，然后调用methodB()的时候发现也需要lockA，由于这是一个可重入锁，所以当前线程也是可以直接进入的。在java中，synchronized跟ReetrantLock都是可重入锁。
public class Demo {
  private Lock lockA;
 
  public Demo(Lock lock) {
    this.lockA = lock;
  }
 
  public void methodA() {
    lockA.lock();
    methodB();
    lockA.unlock();
  }
 
  public void methodB() {
    lockA.lock();
    //dosm
    lockA.unlock();
  }
  }